﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using IUAP.DAL.Intranet;
using IUAP.DAL;

/// <summary>
/// Descripción breve de Malla
/// </summary>
namespace IUAP.BLL.Intranet
{
    public class Malla:BaseIntranet
    {
        public Malla()
        {

        }

        public Malla(string _id_alumno
            , string _nomb_alumno
            , int _id_curso
            , int _id_periodo)
        {
            this.Id_alumno = _id_alumno;
            this.Nomb_alumno = _nomb_alumno;
            this.Id_curso = _id_curso;
            this.Id_periodo = _id_periodo;
        }

        string id_alumno = "";

        public string Id_alumno
        {
            get { return id_alumno; }
            set { id_alumno = value; }
        }
        string nomb_alumno = "";

        public string Nomb_alumno
        {
            get { return nomb_alumno; }
            set { nomb_alumno = value; }
        }
        int id_curso = 0;

        public int Id_curso
        {
            get { return id_curso; }
            set { id_curso = value; }
        }
        int id_periodo = 0;

        public int Id_periodo
        {
            get { return id_periodo; }
            set { id_periodo = value; }
        }
        public static List<Malla> GetCursosEnPeriodoActivo(string id_alumno)
        {
            List<Malla> mallas = null;
            string key = "Intranet_Mallas";
            if (BaseIntranet.Settings.EnableCaching && BizObject.Cache[key] != null)
            {
                mallas = (List<Malla>)BizObject.Cache[key];
            }
            else
            {
                List<MallaDetalles> recordset = SiteProvider.Intranet.GetCursosEnPeriodoActivo(id_alumno);
                mallas = GetMallaListFromMallaDetallesList(recordset);
                BaseIntranet.CacheData(key, mallas);
            }
            return mallas;
        }
        public static Malla GetCursoEnPeriodoActivo(string id_alumno, int id_periodo)
        {
            Malla malla = null;
            string key = "Intranet_Malla_" + id_alumno.ToString();

            if (BaseIntranet.Settings.EnableCaching && BizObject.Cache[key] != null)
            {
                malla = (Malla)BizObject.Cache[key];
            }
            else
            {
                malla = GetMallaFromMallaDetalles(SiteProvider.Intranet.GetCursoEnPeriodoActivo(id_alumno,id_periodo));
                BaseIntranet.CacheData(key, malla);
            }
            return malla;
        }
        public static List<Periodo> GetPeriodosbyAlumno(string id_alumno, bool estado)
        {
            List<Periodo> periodo = null;
            string key = "Intranet_Mallas";
            if (BaseIntranet.Settings.EnableCaching && BizObject.Cache[key] != null)
            {
                periodo = (List<Periodo>)BizObject.Cache[key];
            }
            else
            {
                List<PeriodoDetalles> recordset = SiteProvider.Intranet.GetPeriodosbyAlumno(id_alumno,estado);
                periodo = GetPeriodoListDePeriodosDetallesList(recordset);
                BaseIntranet.CacheData(key, periodo);
            }
            return periodo;
        }
        public static Curso GetDetalleCurso(int id_curso)
        {
            Curso curso = null;
            string key = "Intranet_Malla_" + id_curso.ToString();

            if (BaseIntranet.Settings.EnableCaching && BizObject.Cache[key] != null)
            {
                curso = (Curso)BizObject.Cache[key];
            }
            else
            {
                curso = GetCursoFromCursoDetalles(SiteProvider.Intranet.GetDetalleCurso(id_curso));
                BaseIntranet.CacheData(key, curso);
            }
            return curso;
        }
        private static Curso GetCursoFromCursoDetalles(CursoDetalles record)
        {
            if (record == null)
                return null;
            else
            {
                return new Curso(record.Id_curso, record.Id_escuela, record.Nomb_curs,
                   record.Cred_curs, record.Tipo_curs, record.Seme_curs, record.Actv_curs);
            }
        }
        private static List<Periodo> GetPeriodoListDePeriodosDetallesList(List<PeriodoDetalles> recordset)
        {
            List<Periodo> periodo = new List<Periodo>();
            foreach (PeriodoDetalles record in recordset)
            {
                periodo.Add(GetPeriodoFromPeriodoDetalles(record));
            }
            return periodo;
        }
        private static Periodo GetPeriodoFromPeriodoDetalles(PeriodoDetalles record)
        {
            if (record == null)
                return null;
            else
            {
                return new Periodo(record.Id_periodo, record.Nomb_peri, record.Desc_peri,
                   record.Fech_inic_peri, record.Fech_term_peri, record.Actv_peri);
            }
        }
        private static Malla GetMallaFromMallaDetalles(MallaDetalles record)
        {
            if (record == null)
                return null;
            else
            {
                return new Malla(record.Id_alumno, record.Nomb_alumno, record.Id_curso,
                    record.Id_periodo);
            }
        }
        private static List<Malla> GetMallaListFromMallaDetallesList(List<MallaDetalles> recordset)
        {
            List<Malla> escuelas = new List<Malla>();
            foreach (MallaDetalles record in recordset)
                escuelas.Add(GetMallaFromMallaDetalles(record));
            return escuelas;
        }
    }
}